package com.example.emos.api.common.util;

import com.google.gson.*;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonToArrayListWithGson {
    // 自定义反序列化器，用于处理嵌套的 JSON 对象和数组
    public static class CustomDeserializer implements JsonDeserializer<Object> {
        @Override
        public Object deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            if (json.isJsonObject()) {
                // 如果 JSON 元素是对象，则转换为 HashMap
                JsonObject jsonObject = json.getAsJsonObject();
                Map<String, Object> map = new HashMap<>();
                for (Map.Entry<String, JsonElement> entry : jsonObject.entrySet()) {
                    map.put(entry.getKey(), deserialize(entry.getValue(), Object.class, context)); // 递归调用以处理嵌套结构
                }
                return map;
            } else if (json.isJsonArray()) {
                // 如果 JSON 元素是数组，则转换为 List
                JsonArray jsonArray = json.getAsJsonArray();
                List<Object> list = new ArrayList<>();
                for (JsonElement element : jsonArray) {
                    list.add(deserialize(element, Object.class, context)); // 递归调用以处理嵌套结构
                }
                return list;
            } else if (json.isJsonPrimitive()) {
                // 如果 JSON 元素是基本类型（字符串、数字、布尔值、null）
                JsonPrimitive jsonPrimitive = json.getAsJsonPrimitive();
                if (jsonPrimitive.isBoolean()) {
                    return jsonPrimitive.getAsBoolean();
                } else if (jsonPrimitive.isNumber()) {
                    return jsonPrimitive.getAsNumber();
                } else if (jsonPrimitive.isString()) {
                    return jsonPrimitive.getAsString();
                } else {
                    // 处理 null 值（虽然通常不需要特殊处理，因为 null 可以直接作为 Object 返回）
                    return null;
                }
            } else {
                // 这不应该发生，因为 JsonElement 只能是 JsonObject、JsonArray 或 JsonPrimitive
                throw new JsonParseException("Unexpected JsonElement type");
            }
        }


    }
}